longest palindromic subsequence using dynamic programming